/**
 * 物品造价模型
 */
function PriceModel() {
	var _this = this;
	var observer_list; // 观察者列表
	var ma;

	/**
	 * 构造函数
	 * 初始化观察者列表
	 */
	var init = function () {
		observer_list = new Array();
	}
	/**
	 * 计算造价
	 * 根据用户的选择更新materials中的数据
	 * 添加造价信息materials[i]['price']
	 * 
	 * @param  {[type]} materials     物品材料信息 具体参照eve_controller.js中requestMaterials的注释 
	 * @param  {int} material_level 	材料等级
	 * @param  {int} skill_level   		技能等级 
	 * @param  {int} waste_factor  		损耗系数 
	 *
	 * 材料需求量 公式
	 * 蓝图材料需求量=四舍五入(基础需求量*((1+(默认蓝图材料消耗因子/(1+蓝图材料等级)))+
	 * (0.25-(0.05*生产效率技能等级))),0)
	 * 基础需求量->materials[i]['quantity']
	 */
	_this.calculate = function(materials,material_level,skill_level,waste_factor) {
		ma = util.clone(materials);
		waste_factor = waste_factor / 100.0;
		$.each(materials, function(i, item) {
			// 根据用户的选择更新材料需求量
			ma[i]['quantity'] = Math.round(item['quantity'] * (1 + (waste_factor / (1 + material_level))) + (0.25 - (0.05 * skill_level)), 0);
			ma[i]['price'] = parseFloat(ma[i]['quantity'] * item['sell']).toFixed(2);
		});
		notifyObserver();
	};
	/**
	 * 获取总价
	 * @return {int} 
	 */
	_this.getTotalPrice = function () {
		var total = 0;
		$.each(ma,function (i,item) {
			total += parseInt(item['price']);
		});
		return parseFloat(total).toFixed(2);
	}
	/**
	 * 获取造价信息
	 * @return {ma}
	 */
	_this.getPrice = function () {
		return ma;
	}
	/**
	 * 注册成为观察者
	 * 必须要有update()方法
	 * @param  {object} observer 想成为观察者的对象
	 */
	_this.registerObserver = function (observer) {
		observer_list.push(observer);
	}
	/**
	 * 注销观察者
	 * @param  {object} observer 要注销的对象
	 */
	_this.removeObserver = function (observer) {
		observer_list.splice($.inArray(observer,observer_list),1);
	}
	/**
	 * 通知观察者
	 */
	var notifyObserver = function () {
		$.each(observer_list,function(i,observer){
			observer.update();
		});
	}
	init();
}